home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / sun4.md / machSig.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  5KB  |  129 lines

  1. /*
  2.  * machSig.h --
  3.  *
  4.  *    Declarations of Mach_SigContext and Mach_RegState.  These should
  5.  *    be in mach.h, but can't be, due to a circularity in include files
  6.  *    caused by sig.h
  7.  *
  8.  *
  9.  * Copyright 1989 Regents of the University of California
  10.  * Permission to use, copy, modify, and distribute this
  11.  * software and its documentation for any purpose and without
  12.  * fee is hereby granted, provided that the above copyright
  13.  * notice appear in all copies.  The University of California
  14.  * makes no representations about the suitability of this
  15.  * software for any purpose.  It is provided "as is" without
  16.  * express or implied warranty.
  17.  *
  18.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/sun4.md/machSig.h,v 9.4 91/08/27 16:06:56 mgbaker Exp $ SPRITE (Berkeley)
  19.  */
  20.  
  21. #ifndef _MACHSIG
  22. #define _MACHSIG
  23. #ifdef KERNEL
  24. #include <machConst.h>
  25. #else
  26. #include <kernel/machConst.h>
  27. #endif
  28.  
  29. /*
  30.  * State for each process.
  31.  *
  32.  * IMPORTANT NOTE: 1) If the order or size of fields in these structures change
  33.  *           then the constants which give the offsets must be
  34.  *           changed in "machConst.h".
  35.  *
  36.  *           2) Mach_DebugState and Mach_RegState are the same thing.
  37.  *           If what the debugger needs changes, they may no longer be
  38.  *           the same thing.  Mach_RegState is used as a template for
  39.  *           saving registers to the stack for nesting interrupts, traps,
  40.  *           etc.  Therefore, the first sets of registers, locals and ins,
  41.  *           are in the same order as they are saved off of the sp for
  42.  *           a regular save window operation.  If this changes, changes
  43.  *           must be made in machAsmDefs.h and machConst.h.  Note that
  44.  *           this means the pointer to Mach_RegState for trapRegs in the
  45.  *           Mach_State structure is actually a pointer to registers saved
  46.  *           on the stack.
  47.  *
  48.  *           3) Mach_State defines the use of local registers.   Should
  49.  *           more local registers be necessary, then some of the special
  50.  *           registers (tbr, etc) will need to be saved after the globals.
  51.  *
  52.  *           4) Note that we must be careful about the alignment of
  53.  *           this structure, since it's saved and restored with load
  54.  *           and store double operations.  Without an aligner, this is
  55.  *           hard.  I'm not sure what to do about that.  Usually, this
  56.  *           just be space on the stack, so it will be double-word
  57.  *           aligned anyway.
  58.  */
  59.  
  60. /*
  61.  * The register state of a process: locals, then ins, then globals.
  62.  * The psr, tbr, etc, are saved in locals.  The in registers are the in
  63.  * registers of the window we've trapped into.  The calleeInputs is the
  64.  * area that we must save for the C routine we call to save its 6 input
  65.  * register arguments into if its compiled for debuggin.  The extraParams
  66.  * area is the place that parameters beyond the sixth go, since only 6 can
  67.  * be passed via input registers.  We limit this area to the number of extra
  68.  * arguments in a system call, since only sys-call entries to the kernel
  69.  * have this many args!  How do we keep it this way?  This is MESSY, since
  70.  * actually one of the calleeInputs is for a "hidden parameter" for an agregate
  71.  * return value, and one of them is really the beginning of the extra
  72.  * params, but I'll fix this up later.
  73.  */
  74. typedef struct Mach_RegState {
  75.     unsigned int    curPsr;                /* locals */
  76.     unsigned int    pc;
  77.     unsigned int    nextPc;
  78.     unsigned int    tbr;
  79.     unsigned int    y;
  80.     unsigned int    safeTemp;
  81.     unsigned int    volTemp1;
  82.     unsigned int    volTemp2;
  83.     unsigned int    ins[MACH_NUM_INS];        /* ins */
  84.                         /* callee saves inputs here */
  85.     unsigned int    calleeInputs[MACH_NUM_INS];
  86.                             /* args beyond 6 */
  87.     unsigned int    extraParams[MACH_NUM_EXTRA_ARGS];
  88.     unsigned int    globals[MACH_NUM_GLOBALS];    /* globals */
  89.     unsigned int     fsr;  /* FPU state register. Bit definition 
  90.                    * in machConst. */
  91.     int   numQueueEntries;    /* Number of floating point queue entries
  92.                    * active. */
  93.     unsigned int    fregs[MACH_NUM_FPS];    /* Floating point registers.
  94.                          * This can be treated as
  95.                          * MACH_NUM_FPS floats or
  96.                          * MACH_NUM_FPS/2 doubles. */
  97.     struct {
  98.     char          *address;      /* Address of FP instruction. */
  99.     unsigned int instruction; /* FP instruction value. */
  100.     }  fqueue[MACH_FPU_MAX_QUEUE_DEPTH];  /* Queue of unfinished floating 
  101.                        * point instructions. */
  102. } Mach_RegState;
  103.  
  104. /*
  105.  * Temporary hack so we can add fpu stuff without recompiling debuggers.
  106.  */
  107. #ifdef NOTDEF
  108. typedef    Mach_RegState    Mach_DebugState;
  109. #else
  110. typedef    struct    Mach_DebugState {
  111.     unsigned int    curPsr;                /* locals */
  112.     unsigned int    pc;
  113.     unsigned int    nextPc;
  114.     unsigned int    tbr;
  115.     unsigned int    y;
  116.     unsigned int    safeTemp;
  117.     unsigned int    volTemp1;
  118.     unsigned int    volTemp2;
  119.     unsigned int    ins[MACH_NUM_INS];        /* ins */
  120.                         /* callee saves inputs here */
  121.     unsigned int    calleeInputs[MACH_NUM_INS];
  122.                             /* args beyond 6 */
  123.     unsigned int    extraParams[MACH_NUM_EXTRA_ARGS];
  124.     unsigned int    globals[MACH_NUM_GLOBALS];    /* globals */
  125. } Mach_DebugState;
  126. #endif /* NOTDEF */
  127.  
  128. #endif /* _MACHSIG */
  129.